'use strict';
module.exports = {
	/**
	 *计算中间人数据
	 */
	main: async (event) => {
		const db = uniCloud.database();
		const $ = db.command.aggregate;
		let {
			data = {}, userInfo, util, filterResponse, originalParam
		} = event;
		let {
			customUtil,
			uniID,
			config,
			pubFun,
			vk,
			_
		} = util;
		let {
			uid,
			user_id,
			item,
			todayStart,
			todayEnd,
			last_StartTime,
			last_EndTime,
			yesterday
		} = data;
		let res = {
			code: 0,
			msg: ""
		};
		// 业务逻辑开始-----------------------------------------------------------

		//输入代理商账户ID，生成该代理商昨日数据，第一步先计算昨日新增人数，如为0，则后面无需计算
		if (!user_id) {
			return;
		}


		//查询昨日充值总金额
		res.agent_last_jrczje = await vk.baseDao.sum({
			dbName: "a_recharge",
			fieldName: "shifu_amount", // 需要求和的字段名
			whereJson: {
				middleman_id: user_id,
				pay_status: 1,
				_add_time: _.and(_.gt(last_StartTime), _.lt(last_EndTime))
			}
		});
		//查询ios昨日充值总金额
		res.agent_last_jrczje_ios = await vk.baseDao.sum({
			dbName: "a_recharge",
			fieldName: "shifu_amount", // 需要求和的字段名
			whereJson: {
				os_name: "ios",
				middleman_id: user_id,
				pay_status: 1,
				_add_time: _.and(_.gt(last_StartTime), _.lt(last_EndTime))
			}
		});
		//查询android昨日充值总金额
		res.agent_last_jrczje_android = await vk.baseDao.sum({
			dbName: "a_recharge",
			fieldName: "shifu_amount", // 需要求和的字段名
			whereJson: {
				os_name: "android",
				middleman_id: user_id,
				pay_status: 1,
				_add_time: _.and(_.gt(last_StartTime), _.lt(last_EndTime))
			}
		});
		if (res.agent_last_jrczje == 0) {
			console.log(user_id + "查询昨日充值总金额0");
			await updateMiddlemans()
			return res;
		}


		//查询昨日新增用户数
		res.agent_last_num = await vk.baseDao.count({
			dbName: "uni-id-users",
			whereJson: {
				middleman_id: user_id,
				register_date: _.and(_.gt(last_StartTime), _.lt(last_EndTime))
			}
		});
		//查询昨日充值笔数
		res.agent_last_jrczbs = await vk.baseDao.count({
			dbName: "a_recharge",
			whereJson: {
				middleman_id: user_id,
				pay_status: 1,
				_add_time: _.and(_.gt(last_StartTime), _.lt(last_EndTime))
			}
		});

		//查询昨日新用户充值总金额
		res.agent_last_xyhczje = await vk.baseDao.sum({
			dbName: "a_recharge",
			fieldName: "shifu_amount", // 需要求和的字段名
			whereJson: {
				middleman_id: user_id,
				pay_status: 1,
				user_register_date: _.and(_.gt(last_StartTime), _.lt(last_EndTime)),
				_add_time: _.and(_.gt(last_StartTime), _.lt(last_EndTime))
			}
		});

		//====机构账户级别-查询充值订单里新付费用户数====
		let xffyh = await db.collection('a_recharge')
			.aggregate()
			.match({
				user_register_date: _.and(_.gt(last_StartTime), _.lt(last_EndTime)),
				_add_time: _.and(_.gt(last_StartTime), _.lt(last_EndTime)),
				middleman_id: user_id,
				pay_status: 1
			})
			.group({
				_id: null,
				user_count: $.addToSet('$user_id')
			})
			.end()
		res.agent_last_xffyh = xffyh.data.length ? xffyh.data[0].user_count.length : 0
		//====机构账户级别-计算新付费用户数结束====


		//====机构账户级别-查询充值人数====
		let jrczrs = await db.collection('a_recharge')
			.aggregate()
			.match({
				_add_time: _.and(_.gt(last_StartTime), _.lt(last_EndTime)),
				pay_status: 1,
				middleman_id: user_id
			})
			.group({
				_id: null,
				user_count: $.addToSet('$user_id')
			})
			.end()
		res.agent_last_jrczrs = jrczrs.data.length ? jrczrs.data[0].user_count.length : 0
		//====机构账户级别-查询充值人数结束====


		//查询昨日回传笔数
		res.agent_last_hcbs = await vk.baseDao.count({
			dbName: "jl_huichuanjilu",
			whereJson: {
				type: "active_pay",
				middleman_id: user_id,
				time: _.and(_.gt(last_StartTime), _.lt(last_EndTime))
			}
		});

		//查询昨日回传金额
		res.agent_last_hcje = await vk.baseDao.sum({
			dbName: "jl_huichuanjilu",
			fieldName: "money", // 需要求和的字段名
			whereJson: {
				type: "active_pay",
				middleman_id: user_id,
				time: _.and(_.gt(last_StartTime), _.lt(last_EndTime))
			}
		});

		//计算各项值
		res.agent_last_jrczje = vk.pubfn.toDecimal(res.agent_last_jrczje / 100, 2); //今日充值金额
		res.agent_last_xyhczje = vk.pubfn.toDecimal(res.agent_last_xyhczje / 100, 2); //新用户充值金额
		res.agent_last_xyhffl = vk.pubfn.toDecimal(res.agent_last_xffyh / res.agent_last_num * 100,
			2); //新用户付费率
		res.agent_last_hcje = vk.pubfn.toDecimal(res.agent_last_hcje / 100, 2); //回传金额

		//添加到数据库
		let add_datas = await db.collection('a_datas').add({
			date: yesterday,
			date_time: last_StartTime, //添加一个记录日期的时间戳，方便后面使用筛选日期功能
			drxh: 0, //当日消耗
			drcz: res.agent_last_jrczje || 0, //当日充值金额
			drcz_android: res.agent_last_jrczje_android || 0, //当日充值金额
			drcz_ios: res.agent_last_jrczje_ios || 0, //当日充值金额
			jrroi: 0, //当日roi
			gzcb: 0, //关注成本
			xyhffl: res.agent_last_xyhffl || 0, //新用户付费率
			xyhs: res.agent_last_num || 0, //新用户数
			xyhczje: res.agent_last_xyhczje || 0, //新用户充值金额
			xyhczrs: res.agent_last_xffyh || 0, //新用户充值人数
			drczrs: res.agent_last_jrczrs || 0, //当日充值人数
			drczbs: res.agent_last_jrczbs || 0, //当日充值笔数
			hcbs: res.agent_last_hcbs || 0, //回传笔数
			hcje: res.agent_last_hcje || 0, //回传金额
			tfid: "0",
			middleman_id: user_id, //机构账户ID
			middleman_username: item.username, //机构用户名
			middleman_nickname: item.nickname, //机构昵称
			type: 3, //0是平台总数据，1是账号级数据，2是链接级数据，3机构数据
			remark: "type=3,是机构数据",
			_add_time: new Date().getTime(),
			_add_time_str: vk.pubfn.timeFormat(new Date(), "yyyy-MM-dd hh:mm:ss")
		})

		if (add_datas.id) {
			//通过判断是否存在add_datas.id，来确认数据是否添加成功，从而调用自定义函数更新数据
			await updateMiddlemans()
		}

		console.log("添加中间人统计数据结果=", add_datas);

		// 业务逻辑结束-----------------------------------------------------------
		return res;

		//自定义函数
		async function updateMiddlemans() {
			let updateMiddlemans = await vk.baseDao.update({
				dbName: "uni-id-users", // 表名
				whereJson: { // 条件
					_id: item._id, // true：存在 false：不存在
				},
				dataJson: { // 需要修改的数据
					isComputed: 1, //当天是否已经计算，0没有计算，1已经计算
				}
			});
			console.log("updateMiddlemans=", updateMiddlemans);
		}
		//自定义函数结束
	}
}